package com.gitee.wsl.mathematics.coordinate.d3

import com.gitee.wsl.mathematics.coordinate.MutableCoordinate
import com.gitee.wsl.mathematics.coordinate.d2.Coordinate2
import com.gitee.wsl.mathematics.coordinate.d2.MutableCoordinate2
import com.gitee.wsl.mathematics.vector.vec3.MutableVector3
import com.gitee.wsl.mathematics.vector.vec3.MutableVector3D
import com.gitee.wsl.mathematics.vector.vec3.MutableVector3F

typealias MutablePoint3D = MutableCoordinate3<Double,*>
typealias MutablePoint3F = MutableCoordinate3<Float,*>
typealias MutablePoint3<T,V> = MutableCoordinate3<T,V>

interface MutableCoordinate3<T:Number,V: Coordinate3<T, V>>: Coordinate3<T, V>, MutableCoordinate<T, V>, MutableVector3<T, V> {
    //override val vec2: MutableCoordinate2<T, *>
    //override val vec3: MutableCoordinate3<T, *>

    //override val xy : MutableCoordinate2<T, *>
    //override val xz : MutableCoordinate2<T, *>
    //override val yz : MutableCoordinate2<T, *>

    override fun createVec2(a:T, b:T):MutableCoordinate2<T, *>
}

interface  MutableCoordinate3F<V: Coordinate3<Float, V>> : MutableCoordinate3<Float, V>, MutableVector3F<V>

interface  MutableCoordinate3D<V: Coordinate3<Double, V>> : MutableCoordinate3<Double, V>,MutableVector3D<V>